Mi è capitato alla mano un programmino in C che ho scritto diversi anni fa, per risolvere alcuni problemi di chimica organica applicata all'ingegneria ambientale. Prima è meglio spiegare il significato dei termini, che altrimenti non risulta chiaro ai "non addetti":
- parliamo di acqua (acqua reflua, provetta in laboratorio, ecc) con una sostanza organica disciolta; l'acqua contiene una certa quantità di ossigeno (pensiamo ad un corso d'acqua, per viverci i pesci e specie vegetali deve penetrare l'ossigeno dell'aria anche in profondità). I processi di ossidazione della sostanza organica consumano ossigeno (chimicamente, da sostanza organica diventa inorganica), con le procedure di valutazione che seguono
- BOD: domanda di ossigeno biochimico: la sostanza organica viene biodegradata tramite attività dei microrganismi; sostanze non biodegradabili da specie viventi (batteri) non vengono processate tramite BOD
- COD: domanda di ossigeno chimico: più efficace del BOD, perché vengono aggiunti reattivi chimici per portare all'ossidazione e mineralizzazione della sostanza organica
- ThOD: domanda di ossigeno teorico: tramite la stechiometria, è teorico perché rappresenta il valore massimo possibile (il 100% della sostanza organica viene biodegradata): ovviamente nella pratica la cosa ha senso se conosciamo perfettamente la sostanza immessa, se è un miscuglio vario, non si può applicare
- Vale sempre questo: BOD < COD < ThOD, ovviamente, per come sono definiti
Nel caso del BOD viene misurata la concentrazione di ossigeno iniziale e quella finale, la differenza è ovviamente il consumo di ossigeno; se è presente diluizione (ha senso farlo quando la carica di concentrazione è elevata), viene aggiustato con una proporzione. Nel caso del COD si procede con il volume della sostanza chimica "titolante" e volume totale e "normalità" (eq/l, un parametro per l'agente titolante). Nel caso del ThOD invece abbiamo una sostanza del tipo CwHxNyOz, quindi elenchiamo gli atomi di carbonio, idrogeno, azoto, ossigeno e la solubilità (nota) in acqua della sostanza stessa.
Di seguito riportato il codice C del programma:
#include <stdio.h>
#include <stdlib.h>
float BOD(float DO0, float DOx, float VC, float VT);
float COD(float N,float VT, float VC);
float THOD(float x1, float x2, float x3, float x4, float s);
int main(){
printf("scegli se ti interessa il BOD (1), il COD (2) o THOD (3):\n");
char choice;
fflush(stdin);
scanf("%c", &choice);
if(choice!='1'&&choice!='2'&&choice!='3'){
do{
printf("scegli se ti interessa il BOD (1), il COD (2) o THOD (3):\n");
fflush(stdin);
scanf("%c", &choice);
}while(choice!='1'&&choice!='2'&&choice!='3');
}
switch(choice){
case '1': //BOD
float DO0,DOx,Vc,Vb;
printf("Benvenuto/a nel calcolo del BOD:\n");
printf("inserire OD-0 in mg/l:\n"); scanf("%f", &DO0);
printf("inserire OD-x in mg/l (es. OD-5 = ossigeno disciolto a 5 giorni):\n"); scanf("%f", &DOx);
printf("indicare diluizione Vc, Vt (scegliere [1;1] se non c'è diluizione)\n");
printf("inserire volume campione (l):\n"); scanf("%f", &Vc);
printf("inserire volume totale (diluizione) bottiglia (l):\n"); scanf("%f", &Vb);
printf("BODx = %.2f\n", BOD(DO0,DOx,Vc,Vb));
break;
case '2': //COD
float N, VT, VC;
printf("Benvenuto/a nel calcolo del COD:\n");
printf("specificare volume titolante (l):\n"); scanf("%f", &VT);
printf("specificare volume totale campione (l):\n"); scanf("%f", &VC);
printf("specificare normalita' (N=eq/l) agente ossidante:\n"); scanf("%f", &N);
printf("COD = %.2f mg/l (O2)\n",COD(N,VT,VC));
break;
case '3': //THOD
printf("Benvenuto/a nel calcolo del THOD di una sostanza del tipo CwHxNyOz:\n");
float a,b,c,d,s;
printf("specificare numero atomi di C:\n"); scanf("%f", &a);
printf("specificare numero atomi di H:\n"); scanf("%f", &b);
printf("specificare numero atomi di N:\n"); scanf("%f", &c);
printf("specificare numero atomi di O:\n"); scanf("%f", &d);
printf("specificare solubilita' (in mg/l):\n"); scanf("%f", &s);
printf("THOD = %.2f mg/l (O2)\n",THOD(a,b,c,d,s));
break;
default: break;
}
return 0;
}
float BOD(float DO0, float DOx, float VC, float VT){
//VC=volume campione VT=volume totale
float BODx;
BODx=(DO0-DOx)/(VC/VT);
return BODx;
}
float COD(float N,float VT, float VC){
/*
VT=volume titolante
VC=volume campione(totale)
N=eq/l
*/
float ris,eqOx;
eqOx=N*VT;
ris=(eqOx/VC)*1000*8;
return ris;
}
float THOD(float x1, float x2, float x3, float x4, float s){
/*
x1,x2,x3,x4=coeff. stechiometria
s=solubilità [mg/l]
*/
float ris,x,mO2,mS;
x=x1+0.25*x2+1.5*x3-0.5*x4;
mO2=x*32; //PM[O2]
mS=x1*12+x2*1+x3*14+x4*16; //PM[sostanza]
ris=(mO2/mS)*s; //[mg/l]
return ris;
}