12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #include "geometry.hpp"
- double inf = numeric_limits<double>::infinity();
- Geometry::Geometry(){
- lX=0;
- nX=0;
- dX=0;
- hsoil=nullptr;
- dhsoil=nullptr;
- hbot=nullptr;
- dhbot=nullptr;
- nZ=nullptr;
- dZ=nullptr;
- Z=nullptr;
- }
- Geometry::~Geometry(){
- if(hsoil!=nullptr){
- delete[] hsoil;
- delete[] dhsoil;
- delete[] hbot;
- delete[] dhbot;
- delete[] dZ;
- delete[] nZ;
- for(size_t i=0;i<nX;++i){
- delete[] Z[i];
- }
- delete[] Z;
- }
- }
- void
- Geometry::initZ(double dZ_avg,bool init){
- if(init){
- nZ=new size_t[nX];
- dZ=new double[nX];
- Z=new double*[nX];
- }
- for(size_t k=0;k<nX;++k){
- double d=hsoil[k]-hbot[k];
- size_t n=d/dZ_avg;
- double dz=d/n;
- dZ[k]=dz;
- nZ[k]=n+1;
- if(init) Z[k]=new double[n+1];
- for(size_t j=0;j<n+1;++j){
- Z[k][j]=hbot[k]+j*dz;
- }
- }
- }
- void
- Geometry::save(fstream& file) {
- file.write((char*)&lX,sizeof(double));
- file.write((char*)&nX,sizeof(size_t));
- file.write((char*)&dX,sizeof(double));
- file.write((char*)hsoil,nX*sizeof(double));
- file.write((char*)dhsoil,nX*sizeof(double));
- file.write((char*)hbot,nX*sizeof(double));
- file.write((char*)dhbot,nX*sizeof(double));
- file.write((char*)nZ,nX*sizeof(size_t));
- file.write((char*)dZ,nX*sizeof(double));
- for(size_t i=0;i<nX;++i){
- file.write((char*)Z[i],nZ[i]*sizeof(double));
- }
- }
- void
- Geometry::load(fstream& file,bool init) {
- file.read((char*)&lX,sizeof(double));
- file.read((char*)&nX,sizeof(size_t));
- file.read((char*)&dX,sizeof(double));
- if(init){
- hsoil=new double[nX];
- dhsoil=new double[nX];
- hbot=new double[nX];
- dhbot=new double[nX];
- nZ=new size_t[nX];
- dZ=new double[nX];
- Z=new double*[nX];
- }
- file.read((char*)hsoil,nX*sizeof(double));
- file.read((char*)dhsoil,nX*sizeof(double));
- file.read((char*)hbot,nX*sizeof(double));
- file.read((char*)dhbot,nX*sizeof(double));
- file.read((char*)nZ,nX*sizeof(size_t));
- file.read((char*)dZ,nX*sizeof(double));
- for(size_t i=0;i<nX;++i){
- if(init) Z[i]=new double[nZ[i]];
- file.read((char*)Z[i],nZ[i]*sizeof(double));
- }
- }
|