At present, PLANT is capable of creating GROUND coding for:
Usually it will be non-linear relationships which will be provided by way of PLANT, because linear relationships can be introduced using PIL.
The coded relationships are normally used over the whole computational domain.
They can however be restricted to specific sub-domains and/or controlled by logical and relational conditions, by either REGION or PLACE and IF commands, where the latters are the special PLANT commands.
"labs"> PLANT reads statement lines in the Q1 file which begin with the tags:
Click here to return to "Contents"
The ?? wildcards represent a (section-consecutive) sequence number. This is one of the numbers up to 99 .
The lines must start in column 3 or more so that Satellite treats them as comments.
The remainder of the lines contain the formulae, or rather the relationships, provided by the user.
Dollar sign ($) as the last character on a line is treated as a continuation symbol.
PLANT also reads the next lines which contain COVAL, REGION or PLACE and IF commands.
These indicate how the formulae should be applied and together with statement lines form the PLANT instruction block.
REGION (IXF,IXL,IYF,IYL,IZF,IZL,ITF,ITL) { mark } / switch
It has 8 arguments, one parameter and one switch, namely (in order):
IXF | index number of first cell in X-direction |
IXL | index number of last cell in X-direction |
IYF | index number of first cell in Y-direction |
IYL | index number of last cell in Y-direction |
IZF | index number of first cell in Z-direction |
IZL | index number of last cell in Z-direction |
ITF | index number of first time step |
ITL | index number of last time step |
mark | value of marker variable, MARK, of real type (optional) |
switch | FORTRAN logical or relational expression (optional) |
PLACE (CXF,CXL,CYF,CYL,CZF,CZL,FT,LT) { mark } / switch
It has 8 arguments, one parameter and one switch, namely (in order):
CXF - coordinate of the west region boundary; CXL - coordinate of the east region boundary; CYF - coordinate of the south region boundary; CYL - coordinate of the north region boundary; CZF - coordinate of the low region boundary; CZL - coordinate of the high region boundary; FT - start time; LT - end time; mark - value of marker variable, MARK, of real type (optional); switch - FORTRAN logical or relational expression (optional).
Switch logical expression must have a syntax of FORTRAN construct and must be fully recognised by EARTH.
The permissible size of switch expression is confined by the length of the current REGION or PLACE command lines available, no continuation is allowed, so far.
The REGION or PLACE commands, if present, must immediately follow the {SC????} statements and COVAL command and start in column 3 or greater.
IF (logical expression).
The logical expression must have a syntax of FORTRAN construct and must be fully recognised by EARTH.
Its size is limited by the length of the current line available, no continuation is allowed, so far.
The IF command, if used, must follow immediately the COVAL, REGION or PLACE commands and start in column 3 or greater.
Then PLANT continues to read all strings as above until the end of Q1.
Afterwards PLANT edits the file GROUND.FOR to include the automatically generated FORTRAN coding, required for whatever expressions and conditions have been specified.
The FORTRAN which is coded accords with the rules of GROUND- Earth interactions.
1) the new GROUND must be compiled
2) a new Earth executable must be created
3) the new Earth must be run so as to perform the flow-simulation calculation.
These three operations are made automatically.
Any existing GROUND.FOR is copied to GROUND.SAV and a blank model GROUND.FOR is used as the starting-point for editing.
A copy of the code inserted is available for inspection in a file called PLTEMP.
Click here to return to "Contents"
PLANT permits specification of expressions in the Q1 file for DT, which is the name used to denote the values for the current time-step size in response of the pointer, TLAST=GRND
{SCTS??} DT={expression}
The PLANT block:
{;SCTS01> DT=XG2D/U1 REGION(NX/2,NX/2,NY/2,NY/2,NZ/2,NZ/2,2,2)
instruct EARTH to visit Group 2 of GROUND for a value of DT calculated within the sub-domain, in space and in time, indicated by arguments of REGION.
Click here to return to "Contents"
PLANT permits specification of algebraic expressions in the Q1 file for XRAT, YRAT and DZ which are the names used to denote the values for:-
{SCXS??} XRAT={expression}
{SCYS??} YRAT={expression}
{SCZS??} DZ={expression}
Some examples to be found in the PLANT Input File Library are as follows:
* for the current width of the domain:
{SCYS01> YRAT=1.+:POWER:*DZ/(ZWADD+ZW) REGION(1,1,1,1) IF(IZ.LE.20)
* for forward step size:
{SCZS02> DZ=DZL*(1.-0.02*TEMP[,1,-1]/:TJET:) IF(IZ.GT.2)
The statement
{SCYS01> YRAT=1.+0.5*DZ/(RG(1)+ZW)
gives the dependence similar to laminar boundary layer near the flat plate, where The RG is PIL-set parameter.
If the problem is stated in the X-Y plane, user should perform an exactly corresponding actions for the X-direction domain width, XULAST, so that performed above for XULAST using AZYV=GRND as a pointer, {SCXS??} as a tag and XRAT as variable name of the statement.
The following block may be used to make the step size DZ a fixed fraction, RG(1), of the calculation domain width XULAST in parabolic calculations for all IZ-slabs greater or equal to 5 when the number of cells in X-direction is greater than unity.
{SCZS01> DZ=RG(1)*XULAST REGION(1,NX,1,NY,5,NZ,1,1) IF(PARAB.AND.NX.GT.1)
Further examples of expanding/contracting and adaptive grids .
Click here to return to "Contents"
When BFC equals T in Q1 file, user can introduce the formulae to calculate the corner coordinates of a body-fitted grid to create the geometry and corresponding grids by way of parametric analitics. PLANT therefore provides the possibility of amending these geometrical entities, say with time.
PLANT will place the corresponding codings in Section 2 of Group 19 of GROUND.FOR so that the geometry can be changed in accordance with time at first sweep for all time steps.
The format of PLANT statements in Q1 Group 6 is as follows
{MXYZ01> XC= { expression }
{MXYZ01> YC= { expression }
{MXYZ01> ZC= { expression }
where the tags {MXYZ??} tell PLANT that the corresponding expressions should be coded to calculate the cartesian coordinates, XC, YC and ZC, of the corners of continuity cells.
BFC=T
REAL(LITTLER,TWOPI)
LITTLER=1.0;TWOPI=2.0*3.14157
NX=8;NY=6;NZ=1
{MXYZ01> XC=:LITTLER:*FLOAT(J-1)/FLOAT(NY)*$
COS(:TWOPI:*FLOAT(I-1)/FLOAT(NX))
{MXYZ01> YC=:LITTLER:*FLOAT(J-1)/FLOAT(NY)*$
SIN(:TWOPI:*FLOAT(I-1)/FLOAT(NX))
{MXYZ01> ZC=FLOAT(K-1)/FLOAT(NZ)
CSG1=PHI;CSG2=XYZ
set the BFC grid for a circle of unity radius in XY plane. The corner coordinates will dumped to X1 file and calculation results to P1 file for examination via PHOTON.
Further examples of analytical grid generation including moving BFC option are illustrated below.
Example 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
Click here to return to "Contents"
PLANT permits specification of algebraic expressions in the Q1 file for extra velocities to be added to their current slab store at the point in the computation at which the convection fluxes are assembled. The pointers U1AD, U2AD, V1AD, V2AD, W1AD and W2AD must be set to GRND, as appropriate.
{SCUF??} VELAD = { expression
for 1st phase U1 extra velocity}
{SCUS??} VELAD = { expression
for 2nd phase U2 extra velocity}
{SCVF??} VELAD = { expression
for 1st phase V1 extra velocity}
{SCVS??} VELAD = { expression
for 2nd phase V2 extra velocity}
{SCWF??} VELAD = { expression
for 1st phase W1 extra velocity}
{SCWS??} VELAD = { expression
for 2nd phase W2 extra velocity}
{SCUF01> VELAD = U2 {SCVF01> VELAD = V2 {SCWF01> VELAD = W2
Further example of convection fluxes alteration.
Click here to return to "Contents"
PLANT permits specification of expressions in the Q1 file for:
In addition, the pointers TMP1, TMP2, EL1, EL2, RHO1, RHO2, DRH1DP, DRH2DP, ENUL, ENUT, PRNDTL(PHI) and PHINT(PHI) must be set to GRND, as appropriate.
{PRPT??}
* for laminar viscosity:
{PRPT01> VISL=0.001*EXP(-1.6*(TEMP-0.0)) {PRPT02> VISL=EMU/DEN1
* for laminar Prandtl Number:
{PRPT03> LAMPR(H1)=EMU*CP/COND
* for turbulent viscosity:
{PRPT01> VIST=1.6/7.*YG2D**1.142/100.**0.142
* for length-scale of turbulence:
{PRPT01> LEN1=DIST
* for phase interface values
{PRPT01> FII1(H1)=H2
RHO1 = GRND {PRPT1> DEN1 = 1./H1 ENUL = GRND
{PRPT2> VISL = RG(1)*SQRT(TEM) PRNDTL(H1) = GRND {PRPT3> LAMPR(H1) = VISL*DEN1*RG(2)*RG(3)
Here RG(1), RG(2) and RG(3) are used to transfer to GROUND the values of constants used in the property expressions.
Further examples of a non-linear property correlations.
Click here to return to "Contents"
PLANT permits specification of linear or non-linear inter-phase data including:
The pointers CFIPS, CMDOT, and CINT(PHI) must be set to GRND, as appropriate.
{PRPT??}
{PRPT1> COI1 (H1) =10. *MASS2 {PRPT2> FII1 (H1) = H2 {PRPT3> FII2 (H2) = H1 {PRPT1> INTFRC=500.*R2*MASS1
The following block inserted in Group 10 of Q1 effects this dependence:
CF1PS = GRND {PRPT1> INTFRC = CFIPA*MASS1*R2
PLANT supplies similar options for CMDOT and CINT(PHI) as further examples show.
Click here to return to "Contents"
Some examples to be found in the input-file library now follow.
From library case 19:
PATCH(INIT,INIVAL,1,NX,1,NY,1,NZ,1,1) {INIT01> VAL=XG2D+YG2D INIT (INIT,C1,0.0,GRND)
{INIT02> VAL=XG2D*YG2D INIT (INIT,C2,0.0,GRND)
PATCH(LASTHALF,INIVAL,1,NX,1,NY,NZ/2,NZ,1,1) {INIT1> VAL = RG(1)+RG(2)*YG2D+RG(3)*YG2D**2 INIT(LASTHALF,W1,0.0,GRND)
instructs EARTH to visit Group 11 of GROUND for an array of values for the field of W1 at each slab within the sub-domain indicated by arguments 3 to 8 of PATCH.
The line headed by {INIT??} and corresponding INIT commands must not be separated by blank or comment lines.
The number of devices for initialisation of variables and porosity fields can be implemented by this way.
Click here to return to "Contents"
PLANT facilitates the building up of sophisticated non-linear sources and boundary conditions. This is done by way of formulae from which the CO and VAL of COVAL commands are computed cell-by-cell and sweep-by-sweep, as the flow-simulation proceeds.
{SORC01> VAL=TIM+YG2D {SORC02> VAL=TIM+1.0+YG2D {SORC03> VAL=TIM+XG2D {SORC04> VAL=TIM+1.0+XG2D {SORC05> VAL=TIM+XG2D+YG2D {SORC01> CO=C1**3*TIM**3 {SORC01> CO=RG(1)
The following blocks instruct PLANT to create the necessary coding, and EARTH to look for an array of VALues and/or COefficients for the PATCH:
PATCH(HEAT,VOLUME,3,7,2,20,3,6,1,1) {SORC01> VAL = RG(1)*XG2D+RG(2)*YG2D+RG(3)*ZGNZ COVAL(HEAT,H1,FIXFLU,GRND) PATCH(INLET,LOW,1,NX,1,NY,1,1,1,1) {SORC02> VAL = RG(1)*(RG(2)+RG(3)*YG2D+RG(4)*YG2D**2) COVAL(INLET,P1,FIXFLU,GRND) {SORC03> VAL = RG(2)+RG(3)*YG2D+RG(4)*YG2D**2 COVAL(INLET,W1,ONLYMS,GRND) PATCH(BAFFLE,PHASEM,1,NX,1,NY,1,NZ,1,1) {SORC04> CO = RG(1)*U1**(RG(2)-1.) COVAL(BAFFLE,U1,GRND,0.0) ** Heat exchange between lower and upper sub-domains PATCH(HEATEXT1,VOLUME,1,NX,1,NY,1,NZ,1,1) {SORC10> CO =RG(1)*(U1**2+V1**2+W1**2)**0.4 {SORC10> VAL=TEM2 COVAL(HEATEXCH,TEM1,GRND,GRND) ** Heat exchange between upper and lower sub-domains PATCH(HEATEXT1,VOLUME,1,NX,1,NY,1,NZ,1,1) {SORC11> CO =RG(2)*(U2**2+V2**2+W2**2)**0.4 {SORC11> VAL=TEM1 COVAL(HEATEXT1,TEM2,GRND,GRND)
There must be neither comments no blank lines both between headed lines and between them and COVAL command. The following PLANT block is therefore invalid:
PATCH(SS111B,TYPE,1,NX,1,NY,1,NZ,1,TLAST) {SORC77> CO = { expression } Invalid comment: Above are the formula for COefficient {SORC77> VAL = { expression } Invalid comment: Above are the formula for VALue COVAL(SS111B,U1,GRND,GRND)
Click here to return to "Contents"
PLANT also permits the introduction of coding into the various sections of Group 19 of GROUND allowing re-calculation of selected variables, intervention in calculations and special output preparations.
These may prevail for the whole or part of the domain in space and in time ( by use of REGION or PLACE commands) and can be conditionally controlled (by IF command).
Example 1: which computes the distance from the wall.
** The distance to the nearest wall DIST=sqrt((grad L)**2 + 2.*L) - grad L STORE(DLDZ,DLDY) {SC0601> DLDZ=(HIGH(LTSL) - LOW(LTSL))/(2.*DZGNZ) REGION(1,1,1,20,2,19) {SC0602> DLDZ=(HIGH(LTSL) - LTSL)/DZGNZ REGION(1,1,1,20,1,1) {SC0603> DLDZ= (LTSL - LOW(LTSL))/DZL REGION(1,1,1,20,20,20) {SC0604> DLDY=(NORTH(LTSL) - SOUTH(LTSL))/(2.*DYG2D) REGION(1,1,1,1,1,20) {SC0605> DLDY=(NORTH(LTSL) - LTSL)/DYG2D REGION(1,1,1,1,1,20) {SC0606> DLDY=(LTSL - SOUTH(LTSL))/SOUTH(DYG2D) REGION(1,1,20,20,1,20) {SC0607>DIST=SQRT(DLDZ**2+DLDY**2+2.*LTSL)-SQRT(DLDZ**2+DLDY**2) REGION(1,1,1,20,1,20)
Example 2: User-specified output
The next example concerns the following statements of PLANT block which are needed to calculate the Nusselt number, Nu, over part of the south wall for a uniform grid, in Group 19, Section 6, at the finish of the IZ-slab:
STORE(NU) INTEGER(IX1,IX2) IX1 = 3; IX2 = 6 {SC061> NU=RG(1)*ABS(TEM1-NORTH(TEM1))/YG2D REGION(:IX1:,:IX2:,1,NY/2,1,NZ,1,1)
It should be noted that NORTH(TEM1) denotes the north value of TEMperature and instructs PLANT to make the coding access the north neighbours of the specified REGION.
The SOUTH(PHI), EAST(PHI), WEST(PHI), HIGH(PHI), LOW(PHI) and OLD(PHI) perform the corresponding functions in the other co-ordinate directions.
Further examples of output control settings and special calculations.
Click here to return to "Contents"
PLANT permits specification of algebraic expressions in the Q1 file for RESREF(PHI) which is the reference value of residual for the variable indicated.
{SCnn??} RESREF(PHI) ={ expression }
where nn is user specified Section number of Group 19.
The block:
{SC0301> RESREF(W1)=AHIGH*DEN1*W1**2 REGION(NX/2,NX/2,NY/2,NY/2,NZ/2,NZ/2,1,1)
instructs EARTH to visit Section 3 of Group 19 of GROUND for a value of RESREF(W1) calculated within the sub-domain, in space and in time, indicated by arguments of REGION.
Click here to return to "Contents"
PLANT permits specification of expressions in the Q1 file for DTFALS(PHI) which is the value of false-time-step of under-relaxation for the variable indicated.
{SCnn??} DTFALS(PHI) ={ expression }
where nn is user specified Section number of Group 19.
The block:
{SC0601> DTFALS(H1)=ZWLAST/W1 REGION(NX/2,NX/2,NY/2,NY/2,NZ/2,NZ/2,2,LSTEP)
instructs EARTH to visit Section 6 of Group 19 of GROUND for a value of DTFALS(H1) calculated within the sub-domain, in space and in time, indicated by arguments of REGION.
Further examples of setting under-relaxation devices.
Click here to return to "Contents"
PLANT permits specification of expressions in the Q1 file for VARMAX(PHI) and VARMIN(PHI) which are the maximum and minimum values allowed to variable indicated.
If VARMAX(PHI) is less than -1.e-10, it will be treated as the maximum absolute value of the increment of the value at any updating stage.
If VARMIN(PHI) is less than -1.e-10, it will be assumed that the absolute change made to the variable at all updating stages is limited to VARMAX.
{SCnn??} VARMAX(PHI) ={ expression }
and/or
{SCnn??} VARMIN(PHI) ={ expression }
where nn is user specified Section number of Group 19.
The block:
{SC0601> VARMAX(H1)=H1 REGION(NX/2,NX/2,NY/2,NY/2,NZ/2,NZ/2,2,LSTEP)
instructs EARTH to visit Section 6 of Group 19 of GROUND for a value of DTFALS(H1) calculated within the sub-domain, in space and in time, indicated by arguments of REGION.
Further example of setting limits and increments.
Click here to return to "Contents"
For global summation PLANT inserts Ground coding in Groups 2-5, 8 and 19 which will calculate a single value or a number of values as a result of summating over the whole domain (or over a specified part of the domain) for the expression specified as the argument.
The calculated value(s) are put into a file called globcalc and labelled.
VAR = SUM ( expression),
where VAR stands for automatically declared user real variable name.
{SC0601>R=SUM(SQRT(U1**2+V1**2)) {TEXT>Variable R REGION(1,NX-1,1,NY-1,1,1)
In the above, the line headed {SC0601> contains the variable R, to be computed and the algebraic expression which is summed over the extent of the domain as specified by the REGION command. For the case shown, R will be the sum of the magnitude of the velocities in the XY plane.
The command {TEXT> transmits up to 30 characters of text which will be printed in the globcalc file as,
Global Calculations: Variable R = 4.70132
Global summation feature has proved to be useful in many actions beyond its primarily function, as exemplified for time specification case.
Click here to return to "Contents"
Using the above procedure, PLANT permits properties, sources and solid objects to be placed within pre-defined grids, their presence being signalled by the attachment of the corresponding fluxes and material-property values to the appropriate cells.
The grid can be cartesian, polar or BFC one, the fineness of which the user can control; but he concerns himself only with the construction of the cell-wise distributions of variable, MARK, which constitute the shapes of the MARKed regions.
A library of utility functions is available for calculation of marker distributions in the flow domain. The latters are used to represent the inserts of complex shapes, moving objects, solid shape distortions, region identifications etc.
FIINIT(MARK)=1.0 PATCH(INI1,INIVAL,1,NX,1,NY,1,NZ,1,1) {INIT01> VAL=SPHERE(0.,XG2D,XG2D,XG2D,2.5) INIT (INI1,MARK,0.,GRND)
will "drill" the circular tube from one corner of the cube to the opposite one. Other operations, which make cavities having plane surfaces, have an effect similar to the operation of a milling machine.
In above settings the coordinate arguments of SPHERE function vary with X direction coordinate. For uniform grid it makes the SPHERE function to "drill" the circular diagonal pipe of 2.5 diameter in a cube the cells of which are marked by MARK=1. Each cell of the pipe has the marker MARK=0.0.
{SC0304> MARK =XYBOX(1.0,RG(1)*(TIM-1.),48.,30.,30.,0.0,0.0) IF(ISWEEP.EQ.1)
Here, the function XYBOX is used to calculate time varying re-location of unity object MARKer ( 1st argument) as a linear function of current time and object velocity, RG(1), ( 2nd argument expression). The next three arguments set the cartesian coordinate of south-west box corner and the sizes of its sides. The sixth and seventh arguments, representing rotation angles, are zeros here.
By this technique, the regions of various shapes can be marked and use for introduction of material properties, sources, intervention in the calculations and processing the results.
At present, eight classes of functions are available. They are:
name | shape | orientation |
BOX | rectangular box | any |
ELLPSD | ellipsoid | any |
SPHERE | sphere | any |
XYBOX | rectangular box | XY plane |
XYCIRC | circle | XY plane |
XYELLP | ellipsoid | XY plane |
XYWEDG | triangular wedge | XY plane |
YZBOX | rectangular box | YZ plane |
Many shapes of arbitrary complexity can be generated by combinations of above functions in planted expressions as exemplified for field initialisations. The number of further examples are shown below.
Click here to return to "Contents"
There are PLANT options which are aimed to provide the users with the means to plant the specific codings in a flow domain regions defined in terms of physical space coordinates rather than grid ones.
The following four ways to make grid-free planting are permitted:
(1) Using PLACE command
It is the most straightforward way because command PLACE is nothing more than conditional grid-free variant of PATCH.
(2) Using marker distribution
PLANT can use the grid free distribution of the marker, MARK, over the flow domain as a series of objects fitted in the arbitrarily specified cartesian grid.
The coding which is then PLANTed in GROUND contains logic for the mathematical expression to be tied up with the regions filled by the specific marker property.
The syntax of PLANT instructions for PATCH, COVAL and REGION commands is as follows
(i) For PATCH/COVAL combinations
PATCH(SSmrkNAM,TYPE,1,NX,1,NY,1,NZ,1,LSTEP) {SORC01> CO = { expression } {SORC01> VAL = { expression } COVAL(SSmrkNAM,V1,GRND,GRND)
Here SS ( Space Source ) stands for special PATCH name characters, mrk stands for the value of MARK variable used to define the region over which expressions should be applied and the last three characters, NAM, can be used arbitrarily.
Note that PATCH arguments are applied for the whole domain, not for a part of it.
(ii) To cause PLANT to perform grid free codings in Group 19 the REGION command should be with parameter
REGION(1,NX,1,NY,1,NZ,1,LSTEP ) {mrk}
where mrk stands for marker, MARK, value.
The following block
{SC0608> HEAT= { expression } REGION(1,NX,1,NY,1,NZ,1,LSTEP) 100
provide the application of expression for variable HEAT at the end of the iz-slab for the part of the flow domain marked by MARK=100.
(3) Over-writing PATCH arguments by parameterized REGION command
The following block initialises PRPS field to 100 over the extent of the PATCH where MARK is equal to unity
PATCH(SS001IN,INIVAL,1,5,2,3,8,20,1,LSTEP) {INIT32> VAL=100 INIT (SS001IN,PRPS,0.,GRND)
is equivalent to
PATCH(IN,INIVAL,1,NX,1,NY,1,NZ,1,LSTEP) {INIT32> VAL=100 INIT (IN,PRPS,0.,GRND) REGION(1,5,2,3,8,20,1,LSTEP) 1
where whole field extent of the PATCH named IN is brought in conformity with SS001IN PATCH extents by way of REGION command with unity parameter.
(4) How to make the extents of the PATCHes grid-free
The foregoing example shows that the combination of PIL and PLANT commands can be used to change the extents of the PATCH. The example below shows how to replace the PATCH limits by extents in physical space.
If it is desired to replace the grid arguments of PATCHed source by grid-free limits, one can use the combination of PATCH, COVAL and PLACE commands as the following block shows:
SOLVE(P1,U1,V1) STORE(DUMMY) REAL(ANYVALUE);ANYVALUE=1234. PATCH(ZZZ,CELL,1,NX,1,NY,1,NZ,1,LSTEP) COVAL(ZZZ,U1,GRND3,GRND3) {SORC01> CO = ANYVALUE COVAL(ZZZ,DUMMY,GRND,ANYVALUE) PLACE(0.,1.,2.,5.6,0.45,3.0,1.,2.)
The result will be that source for U1 calculated as GRDm option of COefficient and GRNDn option for VALue will be applied over the extent of 0.0 to 1.0m in X-direction, 2.0 to 5.6m in Y-direction, 0.45 to 3.0m in Z-direction and 1.0 to 2.0s of time.
The multi-space, HEXAGON, model for Solid-Fluid-Thermal analysis of heat exchanger performance provides rather typical example of the grid-free operations.
Click here to return to "Contents"
PLANT allows for mathematical expressions to be planted into the GROUND to operate straightforwardly with either in-cell or its nearest neighbours, i.e. " old", "high", "north" and "east" field variables referenced by their names, OLD(PHI), HIGH(PHI) etc. as the example below shows.
{SC0601> NU=RG(1)*ABS(TEM-NORTH(TEM))/YG2D REGION(1,1,1,NY,1,NZ,1,1)
PLANT is also taught to work not only with fixed elements of PHOENICS global F-array. PLANT can manipulate whole segments of array which contain variables of defined class. The latter feature greatly facilitates the building up sophisticated indicial expressions which otherwise would require in-depth knowledge of GROUND-EARTH-SATELLITE interior connections and number of special rules and techniques.
The built-in technique employs efficient procedural operators to build indexed expressions right in Q1. This is done by way of straightforward using of cell-location-coordinate indices in three coordinate directions instead of their linear functions as for conventional GROUND coding.
Some examples of how to handle indices now folllow.
Index PHOENICS PLANT required integer function operand P - PHI or PHI[,,] E EAST(PHI) PHI[+1,,] N NORTH(PHI) PHI[,+1,] H HIGH(PHI) PHI[,,+1] NN HH W - PHI[-1,,] | / S - PHI[,-1,] NW N H L - PHI[,,-1] / | / EE - PHI[+2,,] WW--W--P--E--EE NN - PHI[,+2,] / | / HH - PHI[,,+2] L S SE WW - PHI[-2,,] / | SS - PHI[,-2,] LL SS LL - PHI[,,-2] NW - PHI[-1,+1,] SE - PHI[+1,-1,] and so on...
STORE(PNEW) {SC0601> PNEW=P1-P1[1,1,1]
Many developments may require above feature, as exemplified for field initialisation.
Click here to return to "Contents"
PLANT commands can make use of additional information about what the user wants to do. This information may be included by typing-in the parameter after typed command. Usually, the command will have a default - it will automatically perform its function in certain way if there is not typed-in parameter.
RHO1=GRND {PRPT01> DEN1=1./H1 REGION(1,NX,1,NY,1,NZ,1,3) /LG(1)
The LG(1) switch specifies that the relationship, DEN1=1./H1, will be used if LG(1)=T appears somewhere in Q1.
Simple logical expressions can be combined with the logical operators .AND.,.OR. and .NOT. to create arbitrary complex logical switches:
REGION(1,NX,1,NY,1,NZ,1,3) /LG(1).AND.ISWEEP.EQ.LSWEEP-10 REGION(1,NX,1,NY,1,NZ,1,3) /IX.GT.NX-10.AND..NOT.BFC
The switches allows the compact way to introduce short relational and logical conditions in PLANTed coding.
However, it is, sometimes, more convenient to use special command for introduction of IF ... THEN construct. The IF command ensures that the longer valid logical expression used as command argument conforms the correct FORTRAN planted in the right place.
REGION(1,NX,1,NY,1,NZ,1,3) /IX.GT.NX-10.AND..NOT.BFCis equivalent to:
REGION(1,NX,1,NY,1,NZ,1,3) IF(IX.GT.NX-10.AND..NOT.BFC )Further typical examples.