[mpas-developers] specifying tracers
Mark Petersen
mpetersen at lanl.gov
Tue Mar 23 16:54:00 MDT 2010
Michael,
Specifying tracer names within super-arrays and classes is perfect. When
I do the following to registry:
< var real tracers ( nTracers nVertLevels nCells Time ) iro tracers - -
---
> var real temperature (nVertLevels nCells Time ) iro temperature tracers dynamics
> var real salinity (nVertLevels nCells Time ) iro salinity tracers dynamics
I get the following error during compile:
fortcom: Error: module_io_input.f90, line 2473: An explicit-shape-spec in
an ALLOCATE statement is incorrect. [SUPER_REAL1D]
allocate(super_real1d())
---------------^
fortcom: Error: module_io_input.f90, line 2494: An explicit-shape-spec in
an ALLOCATE statement is incorrect. [SUPER_REAL1D]
allocate(super_real1d())
---------------^
Which is from lines that set up these new variables:
allocate(super_real1d())
real1d % ioinfo % fieldName = 'temperature'
call io_input_field_time(input_obj, real1d)
call dmpar_alltoall_field(dminfo, &
real1d % array, super_real1d, &
readCellsCount, block % mesh % nCells, &
sendCellsList, recvCellsList)
Is the lack of argument on allocate(super_real1d()) a text parsing issue?
Could you advise me on how to proceed?
Thanks,
Mark
On Mon, 22 Mar 2010, Michael Duda wrote:
> Mark,
>
> there is actually a capability in the registry to do what you've
> described. You'll notice that the last two words in an entry for a
> variable in the registry generally are '-' and '-'; these can be
> changed to the name of a so-called super-array and a class,
> respectively.
>
> Here's a description of how the capability works:
>
> Two additional columns must now be specified for all variables in the
> Registry file. The first new column specifies the name of the
> 'super-array' that a field belongs to in the code (or "-" if the field
> is to be kept as a separate array); the second new column specifies
> the class within the super-array that the field is associated with.
> For example:
>
> var real qi ( nVertLevels nCells Time ) iro qi scalars moist
> var real qc ( nVertLevels nCells Time ) iro qc scalars moist
> var real qr ( nVertLevels nCells Time ) iro qr scalars moist
> var real o3 ( nVertLevels nCells Time ) iro o3 scalars chem
> var real no2 ( nVertLevels nCells Time ) iro no2 scalars chem
>
> For each field belonging to a super-array, an index into the
> inner-most dimension of the super-array is automatically defined and
> made available through the grid_types module. This index is named
> xyz_INDEX, where xyz is the name-in-code name specified in the third
> from the last column in the Registry file; this index may then be
> used to access a particular field in its super-array; for example:
>
> scalars(qi_INDEX, k, iCell) = temp_qi
>
> Also, for each class, all fields belonging to that class will be
> located contiguously in the super-array, regardless of their order in
> the Registry file, and they can be accessed collectively through
> automatically-generated indices ccc_start and ccc_end, where ccc is
> the name of the class; for example:
>
> sum_species = sum(scalars(moist_start:moist_end, k, iCell))
>
> Finally, the total number of members of a super-array is defined by an
> automatically-generated variable num_sss, where sss is the name of the
> super-array; for example:
>
> do i=1,num_scalars
> tracer_edge(i) = 0.5*(scalars(i,k,cell1) + scalars(i,k,cell2))
> end do
>
> This description (from the commit for r87) is inaccurate in that
> the indices are named index_ccc rather than ccc_index, I think,
> but otherwise, it summarizes the capability correctly. We've made
> use of this capability in the hydrostatic atmosphere model for
> managing tracers; essentially, we now specify
>
> var real qv ( nVertLevels nCells Time ) iro qv scalars moist
> var real qc ( nVertLevels nCells Time ) iro qc scalars moist
> var real qr ( nVertLevels nCells Time ) iro qr scalars moist
>
> rather than
>
> var real tracers ( nTracers nVertLevels nCells Time ) iro tracers - -
>
> in the Registry file src/core_hyd_atmos/Registry to create a
> scalars array (we decided to call the array 'scalars' rather than
> 'tracers') with three members, qv, qc, and qr, which are
> accessible as scalars(index_qv,:,:), etc.
>
> Cheers,
> Michael
>
>
> On Mon, Mar 22, 2010 at 01:59:47PM -0600, Mark Petersen wrote:
>> Michael,
>>
>> I need to assign an index number to temperature and salinity within the
>> tracer array. Eventually we will have numerous tracers that will need a
>> corresponding tracer index.
>>
>> The easiest idea is to have integer variables
>> iTemperature=1
>> iSalinity=2
>> But that requires manual manipulation and reordering as we add tracers.
>>
>> A more advanced method is to have an unnumbered list of tracers, perhaps
>> in the Registry, and some function like
>> ind = getTracerIndex('temperature')
>> so that the numbering is automatic and hidden.
>>
>> Have you given this any thought? Perhaps mpas already has some indexing
>> capabilities?
>>
>> Thanks,
>> Mark
>>
>> _______________________________________________
>> mpas-developers mailing list
>> mpas-developers at mailman.ucar.edu
>> http://mailman.ucar.edu/mailman/listinfo/mpas-developers
> _______________________________________________
> mpas-developers mailing list
> mpas-developers at mailman.ucar.edu
> http://mailman.ucar.edu/mailman/listinfo/mpas-developers
>
More information about the mpas-developers
mailing list