Changeset 2011

Show
Ignore:
Timestamp:
05/02/08 16:50:16 (1 week ago)
Author:
rjrw
Message:

First cut at implementing dynamics terms.

Passes smoke test, fails during allocation for dynamics run (trying to
allocate before the size of the isolevel arrays is determined).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/isodyn/source/dynamics.cpp

    r2000 r2011  
    652652                        } 
    653653                } 
    654  
     654                for( long ipISO=ipH_LIKE; ipISO<NISO; ++ipISO ) 
     655                { 
     656                        for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem) 
     657                        { 
     658                                for( long level=0; level < iso.numLevels_local[ipISO][nelem]; ++level ) 
     659                                { 
     660                                        dynamics.StatesElem[ipISO][nelem][level] = 0.; 
     661                                } 
     662                        } 
     663                } 
    655664                for(mol=0;mol<N_H_MOLEC;mol++) 
    656665                { 
     
    791800                } 
    792801        } 
     802 
     803        for( long ipISO=ipH_LIKE; ipISO<NISO; ++ipISO ) 
     804        { 
     805                for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem) 
     806                { 
     807                        for( long level=0; level < iso.numLevels_local[ipISO][nelem]; ++level ) 
     808                        { 
     809                                dynamics.StatesElem[ipISO][nelem][level] =  
     810                                        UpstreamStatesElem[ipISO][nelem][level] * dense.gas_phase[ipHYDROGEN] / timestep; 
     811                        } 
     812                } 
     813        } 
     814 
    793815#       if 0 
    794816        fprintf(ioQQQ,"dynamiccc\t%li\t%.2e\t%.2e\t%.2e\t%.2e\n", 
     
    18261848                                for( long level=0; level < iso.numLevels_local[ipISO][nelem]; ++level ) 
    18271849                                {  
    1828                                         Old_StatesElem[i][ipISO][nelem][level] = struc.StatesElem[ipISO][nelem][level][i]
     1850                                        Old_StatesElem[i][ipISO][nelem][level] = struc.StatesElem[ipISO][nelem][level][i]*struc.xIonDense[nelem][nelem-ipISO][i]
    18291851                                } 
    18301852                        } 
     
    19691991                } 
    19701992        } 
     1993 
     1994        dynamics.StatesElem = ((double***)MALLOC( (size_t)NISO*sizeof(double **) )); 
     1995 
     1996        for( long ipISO=ipH_LIKE; ipISO<NISO; ++ipISO ) 
     1997        { 
     1998                dynamics.StatesElem[ipISO] =  
     1999                        (double**)MALLOC(sizeof(double*)*(unsigned)(LIMELM) ); 
     2000                for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem) 
     2001                { 
     2002                        dynamics.StatesElem[ipISO][nelem] =  
     2003                                (double*)MALLOC(sizeof(double)*(unsigned)iso.numLevels_max[ipISO][nelem]); 
     2004                } 
     2005        } 
     2006 
    19712007        dynamics.Rate = 0.; 
    19722008 
  • branches/isodyn/source/dynamics.h

    r1822 r2011  
    7070        double Rate; 
    7171 
    72         /** the advective recombination rate (cm^-3 s^-1)*/ 
     72        /** the advective ionization balance terms (cm^-3 s^-1)*/ 
    7373        double **Source /*[LIMELM][LIMELM+2]*/; 
     74 
     75        /** the advective isolevel balance terms */ 
     76        double ***StatesElem; 
    7477 
    7578        /** save H2 and CO densities */ 
  • branches/isodyn/source/iso_level.cpp

    r1960 r2011  
    321321                } 
    322322 
    323                 /* >>chng 02 Sep 06 rjrw -- all elements have these terms */ 
    324                 /*>>>chng 02 oct 01, only include if lgAdvection is set */ 
    325                 if( dynamics.lgAdvection && dynamics.lgISO[ipISO]) 
    326                 { 
    327                         /* add in advection - these terms normally zero */ 
    328                         /* assume for present that all advection is into ground state */ 
    329                         source += dynamics.Source[nelem][nelem-ipISO]; 
    330                         /* >>chng 02 Sep 06 rjrw -- advective term not recombination */ 
    331                         /* can sink from all components (must do, for conservation) */ 
    332                         sink += dynamics.Rate; 
    333                 } 
    334  
    335323#if     0 
    336324                /* add in source and sink terms from molecular network. */ 
     
    349337                { 
    350338                        z[level][level] += sink; 
     339                } 
     340 
     341                /* >>chng 02 Sep 06 rjrw -- all elements have these terms */ 
     342                /*>>>chng 02 oct 01, only include if lgAdvection is set */ 
     343                if( dynamics.lgAdvection && dynamics.lgISO[ipISO]) 
     344                { 
     345                        for( level=0; level < numlevels_local; level++ ) 
     346                        { 
     347                                creation[level] += dynamics.StatesElem[nelem][ipISO][level]/SDIV(dense.xIonDense[nelem][nelem+1-ipISO]); 
     348                                z[level][level] += dynamics.Rate; 
     349                        } 
    351350                } 
    352351 
  • branches/isodyn/source/service.cpp

    r1954 r2011  
    15801580        DEBUG_ENTRY( "MyMalloc()" ); 
    15811581 
     1582        if (size == 0) 
     1583                fprintf(stdout,"Failed at %s:%d\n",chFile,line); 
    15821584        ASSERT( size > 0 ); 
    15831585