This section explains the contents of the full file (jobname.full).
See The Standard Header for Mechanical APDL Binary Files for a description of this set. File number (Item 1) is 4.
*comdeck,fdfull
c *** Copyright ANSYS. All Rights Reserved.
c *** ansys, inc.
c ********** description of full stiffness-mass file **********
character*8 FULLNM
parameter (FULLNM='full ')
c *** NOTE: if this variable is changed in the future it should be
c *** updated in spdefines.h also for symbolic assembly (jrb)
integer FULLHDLEN
parameter (FULLHDLEN=160)
LONGINT fullfpL, fullfp
integer fullbk, fullut, wrLdstep, wrSbstep, wrEqiter,
x wrOption
common /fdfull/ fullfpL, fullbk, fullut,
x wrLdstep,wrSbstep,wrEqiter,wrOption
equivalence (fullfp,fullfpL)
c ********** common variable descriptions ***********
co fullfpL file position on file full
co fullbk block number for file full
co fullut file unit for file full
c ********** file format (except for extopt=3,4) **********
c See fddesc for documentation of how binary files are stored.
c ********** file format **********
c recid tells the identifier for this record. Not all records will have
c identifiers -- they are only indicated for those records whose
c record pointers are stored in the second file header.
c type tells what kind of information is stored in this record:
c i - integer
c dp - double precision
c cmp - complex
c nrec tells how many records of this description are found here
c lrec tells how long the records are (how many items are stored)
c recid type nrec lrec contents
c --- i 1 100 standard ANSYS file header (see binhed8 for
c details of header contents)
c --- i 1 160 .FULL FILE HEADER
c
c fun04, neqn, nmrow, nmatrx, kan,
c wfmax, lenbac, numdof, ntermKl, ntermKh, (10)
c lumpm, nmrow, ntermK, keyuns, extopt,
c keyse, sclstf, nxrows, ptrSTFl, ptrSTFh, (20)
c ncefull, ntermMh, ptrENDl, ptrENDh, ptrIRHSl,
c ptrIRHSh, ptrMASl, ptrMASh, ptrDMPl, ptrDMPh, (30)
c ptrCEl, ptrCEh, nNodes, ntermMl, ntermDl,
c ptrDOFl, ptrDOFh, ptrRHSl, ptrRHSh, ntermDh, (40)
c ngMaxNZ, ptrNGPHl, ptrNGPHh, minKdiag, maxKdiag,
c minMdiag, maxMdiag, minDdiag, maxDdiag, ngTerml, (50)
c ngTermh, ngTermCl, ngTermCh,ptrDIAGKl,ptrDIAGKh,
c ptrDIAGMl,ptrDIAGMh,ptrDIAGCl,ptrDIAGCh, ptrSCLKl, (60)
c ptrSCLKh, Glbneqn, distKey, ngTermFl, ngTermFh,
c GlbnNodes, GlbnVars, GlbfAcCE, 0, GlbfCE, (70)
c ptrGmtl, ptrGmth,nceGprime,numA12A11,GnVirtBCs,
c ntermGl, ntermGh,ptrDensel,ptrDenseh, nVirtBCs, (80)
c ptrVrtBCl,ptrVrtBCh, ptrMRKl, ptrMRKh, ptrKclxl,
c ptrKclxh, ntermKCl, ntermKCh,minKCdiag,maxKCdiag, (90)
c ngChg, ptrBCl, ptrBCh, ptrPHYSl, ptrPHYSh,
c predKey, neqnDist, ptrGVBCl, ptrGVBCh, 0, (100)
c localNonlKey, nMastDOF, ptrMDFl, ptrMDFh, GlbnMast,
c ptrGMDFl, ptrGMDFh, cmsMeth, cmsMixF, hrmopt, (110)
c ActFlag,InActNKey,IANSndCnt,IANRcvCnt,Glblenbac,
c ptrActl, ptrActh,ext_nNods, ext_neqn,ext_nmrow, (120)
c EqnMtxFlag, krysub, ext_nce, ptrExtNl, ptrExtNh,
c ExtSndCnt,ExtRcvCnt,buildGall,nExtSndCE,nExtRcvCE, (130)
c ShaSndCnt,ShaRcvCnt, 0, 0, 0,
c 0, 0, 0, 0, 0, (140)
c 0, 0, 0, 0, 0,
c 0, 0, 0, 0, 0, (150)
c 0, 0, 0, 0, 0,
c 0, 0, 0, 0, 0 (160)
c each item in header is described below:
c fun04 - negative of the unit number (-4)
c NOTE: if fun04 is > 0 it means that
c frontal assembly was used (which
c is longer documented here)
c neqn - number of equations on file
c nmrow - number of active DOF (neqn-BC)
c nmatrx - number of matrices on file
c kan - analysis type
c wfmax - maximum row size
c lenbac - number of nodes in ANSYS space (this can be different from nNodes when ActFlag is on)
c numdof - number of dofs per node
c ntermKl,ntermKh - number of terms in Stiffness
c matrix
c lumpm - lumped mass key
c = 0 - default matrix type
c = 1 - lumped
c ntermK - pre-8.1 this is the number of terms
c in Stiffness matrix (otherwise this
c value must be 0 and ntermKl,ntermKh
c must be used)
c keyuns - unsymmetric key
c = 0 - no unsymmetric matrices on
c file
c = 1 - there is at least one
c unsymmetric matrix on file
c extopt - mode extraction method
c = 0 - reduced
c = 1 - lumped
c = 3 - unsymmetric Lanczos
c = 4 - damped Lanczos
c = 6 - block Lanczos
c = 7 - QRdamped
c = 8 - SuperNode
c = 9 - PCG Lanczos
c keyse - superelement key; set if at least
c one superelement
c sclstf - maximum absolute stiffness matrix term
c nxrows - the maximum rank for this solution
c ptrSTFl,h - pointer to Stiffness matrix
c ncefull - number of CE+CP equations including acrossCE and inCpuCE
c ptrENDl - low part of 64 bit end of file ptr
c ptrENDh - high part of 64 bit end of file ptr
c ptrIRHSl,h - pointer to imaginary RHS (F)
c ptrMASl,h - pointer to Mass matrix
c ptrDMPl,h - pointer to Damping matrix
c ptrCEl,h - pointer to Gt and g matrices
c nNodes - number of nodes considered by assembly (nNodes can be different from lenbac when ActFlag is on)
c ntermMl,h - number of terms in Mass matrix
c ntermDl,h - number of terms in Damping matrix
c ptrDOFl,h - pointer to DOF info
c ptrRHSl,h - pointer to RHS (F)
c ngMaxNZ - maximum number of nodes per nodal
c block in nodal graph structure
c ptrNGPHl,h - pointer to vectors needed for
c nodal graph structure
c minKdiag - minimum absolute stiffness matrix
c diagonal term
c maxKdiag - maximum absolute stiffness matrix
c diagonal term
c minMdiag - minimum absolute mass matrix
c diagonal term
c maxMdiag - maximum absolute mass matrix
c diagonal term
c minDdiag - minimum absolute damping matrix
c diagonal term
c maxDdiag - maximum absolute damping matrix
c diagonal term
c ngTerml,h - total number of nonzeroes in nodal graph
c (expanded graph based value, no BC applied)
c ngTermCl,h - total number of nonzeroes in nodal graph
c (compressed graph based value)
c ptrDIAGKl,h - pointer to stiffness matrix DIAGONAL vector
c (NOTE: this is a copy of the diagonal
c values stored in the full matrix)
c ptrDIAGMl,h - pointer to mass matrix DIAGONAL vector
c (NOTE: this is a copy of the diagonal
c values stored in the full matrix)
c ptrDIAGCl,h - pointer to damping matrix DIAGONAL vector
c (NOTE: this is a copy of the diagonal
c values stored in the full matrix)
c ptrSCLKl,h - pointer to stiffness matrix diagonal scaling
c vector (may contain all 1.0's when not scaling)
c Glbneqn - global number of active DOF (this will match nmrow
c unless we are writing distributed "local" FULL files
c in Distributed ANSYS
c distKey - key denoting whether the FULL file is a single,
c global FULL file (0) or multiple, local FULL file (1)
c ngTermFl,h - total number of nonzeroes in nodal graph
c as passed to the solver (after BC applied)
c GlbnNodes - global number of nodes considered by assembly
c GlbnVars - global number of equations (will match neqn
c unless we are writing distributed "local" FULL files
c in Distributed ANSYS
c GlbfAcCE - total number of acrossCpu CE (GlbfinalAcCE)
c GlbfCE - total number of all the CE (GlbfinalCE)
c ptrGmtl,h - pointer to G prime matrix for local nonlinearity
c nceGprime - number of CE (or equations) in G prime local nonlinearity
c numA12A11 - number of equations in local nonlinear matrix: excluding
c equations from G prime
c GnVirtBCs - global number of virtual constraints
c ntermGl,ntermGh - total number of terms in total local nonlinear
c matrix including A12,A11 and G: total sum
c ptrDensel,ptrDenseh - dense matrix information in local nonlinear
c matrix
c nVirtBCs - number of virtual constraints
c ptrVrtBCl,ptrVrtBCh - pointer to the virtual constraint DOF data
c ptrMRKl,h - pointer to the DOF marker array
c ptrKclxl,h - pointer to K complex (the 4th matrix) matrix
c full case is: K, M, C, Kcplx: existing at same time
c ntermKCl,h - number of terms in Complex Stiffness matrix
c minKCdiag - minimum absolute complex stiffness matrix
c diagonal term
c maxKCdiag - maximum absolute complex stiffness matrix
c diagonal term
c ngChg - key denoting whether or not the nodal graph written
c to this FULL file differs from the previous FULL file
c ptrBCl,h - pointer to boundary condition data
c ptrPHYSl,h- pointer to the physics marker array
c predKey - nonlinear analysis predictor key
c neqnDist - number of distributed equations being solved in current domain (DDSP)
c ptrGVBCl,h- pointer to the global virtual constraint DOF data
c localNonlKey - local nonlinearity speedup key
c nMastDOF - number of master DOF for substructuring
c ptrMDFl,h - pointer to the master DOF data for substructuring
c GlbnMast - global number of master DOF for substructuring
c ptrGMDFl,h- pointer to the global master DOF data for substructuring
c cmsMeth - CMS method key
c = 0 - fixed interface method
c = 1 - free interface method
c = 3 - residual-flexible free interface method
c = 4 - user defined method
c cmsMixF - flags mixed interface method derived from
c = 1 - free interface method
c = 3 - Residual-flexible free interface method
c = 0 - default
c hrmopt - harmonic analysis type
c = 0 Not a harmonic analysis
c > 0 Harmonic analysis type
c ActFlag - active element logic flag for the two-step method (only assemble and solve active nodes)
c - equivalent to actSymbFlag defined in soptcm.inc
c - currently, it is used for AM and target element trimming
c = 2 - mark active nodes in casiInitialize before assembly due to targets trimming
c = 1 - mark active nodes in casiInitialize before assembly due to additive manufacturing
c = 0 - default
c InActNKey - sum of number of inactive nodes across all domain.
c - it is only useful when ActFlag = 2
c = 0 - number of active nodes (nNodes) is equal to original ANSYS nodes (lenbac)
c - there is no need to do AllToAll communication for the inactive nodes located on the interfaces between domains
c > 0 - number of active nodes (nNodes) is smaller than original ANSYS nodes (lenbac)
c - if distributed full file is used, AllToAll communication are required to recover solution from FULL dof space
c - back to ANSYS dof space
c IANSndCnt - total number of inactive nodes that need to be sent to other domains
c - it is only usefull when InActNKey > 0 and distributed full file is used
c = 0 - no inactive nodes information in current domain that need to be sent to other domains
c > 0 - length of InActNodesSnd array
c IANRcvCnt - total number of inactive nodes that need to be received from other domains
c - it is only usefull when InActNKey > 0 and distributed full file is used
c = 0 - no inactive nodes information in current domain that need to be received to other domains
c > 0 - length of InActNodesRcv array
c Glblenbac - Global number of nodes in ANSYS space
c ptrActl,h - pointer to act nodes to ANSYS nodes mapping array and other supporting mapping vectors.
c ext_nNods - nNodes + extra number of nodes needed by local equation based matrix
c ext_neqn - neqn on file + extra number of equations needed by local equation based matrix
c ext_nmrow - ext_neqn - nBC - number of BC in extra number of equations needed by local equation based matrix
c EqnMtxFlag - unused
c krysub - key signaling that this .full file was created during the stage of buildling
c the subspace for the KRYLOV method in a harmonic or transient analysis
c ext_nce - ncefull + extra number of CE/CP from extra number of equations needed by local equation based matrix
c ptrExtNl,h - pointer to extra dof mapping array
c ExtSndCnt - total number of extra equation that need to be sent to other domains
c ExtRcvCnt - total number of extra equation that need to be received from other domains
c buildGall - key indicates whether Gbc is saved in full file or not (Gall needs to be built or not):
c = 0 - no need to save Gbc in full file since G == Gall
c = 1 - need to save Gbc in full file to build Gall, Gall = G + Gbc
c nExtSndCE - total number of extra equation (due to acrossCE) that need to be sent to other domains
c nExtRcvCE - total number of extra equation (due to acrossCE) that need to be received from other domains
c ShaSndCnt - total number of shared equation (interface dof) that need to be sent to other domains
c ShaRcvCnt - total number of shared equation (interface dof) that need to be received from other domains
c --- i 1 numdof Degrees of freedom per node
c DOF reference numbers are:
c UX = 1, UY = 2, UZ = 3, ROTX= 4, ROTY= 5, ROTZ= 6, AX = 7, AY = 8
c AZ = 9, VX =10, VY =11, VZ =12, GFV1=13, GFV2=14, GFV3=15, WARP=16
c CONC=17, HDSP=18, PRES=19, TEMP=20, VOLT=21, MAG =22, ENKE=23, ENDS=24
c EMF =25, CURR=26, SP01=27, SP02=28, SP03=29, SP04=30, SP05=31, SP06=32
c --- i 1 lenbac Nodal equivalence table. This table equates
c the number used for storage to the actual
c node number
c --- i 1 Glblenbac Global nodal equivalence table. This record
c EXISTS ONLY in the full file of the master
c domain and ONLY for distributed .full files
c
c Stiffness Matrix. The next two records are repeated as a group neqn times.
c STF i 1 varies Matrix row indices. The last item
c corresponds to the diagonal. The
c length of this record will vary (actual
c length is returned from routine BINRD8)
c --- dp/cmp 1 varies Matrix terms
c If keyuns=0, this record will contain the
c terms before the diagonal.
c If keyuns=1, this record will contain the
c entire row.
c
c Load Vector
c RHS dp/cmp 1 neqn Load vector terms.
c Imaginary part of Load Vector
c IRHS dp 1 neqn Imaginary load vector terms.
c This record EXISTS ONLY if its pointer in the header
c is not zero.
c Stiffness matrix diagonal vector
c DIAGK dp/cmp 1 neqn diagonal vector data for stiffness matrix.
c Stiffness matrix diagonal scaling vector
c SCLK dp/cmp 1 ext_neqn diagonal scaling vector for stiffness matrix.
c DOF marker array
c MRK i 1 neqn marker array flagging various types of DOF
c (1=U_EQN, 2=P_EQN, 3=E_EQN, 4=A_EQN). Positive
c values mean the DOF belongs to a user-defined node,
c negative values mean the DOF belongs to an internal node.
c NOTE: if this array does not exist then it is assumed that
c all DOFs are U_EQNs for user-defined nodes.
c PHYSICS marker array
c PHYS i 1 neqn marker array flagging the various types of physics
c (1=STRUCTURAL_EQN, 2=THERMAL_EQN, 3=ELECTRICAL_EQN,
c 4=MAGNETIC_EQN, 5=FLUID_EQN, 6=DIFFUSION_EQN)
c NOTE: if this array does not exist then it is assumed that
c all DOFs are STRUCTURAL_EQNs.
c DOF information
c DOF i 1 ext_nNods Nodal extent vector. Number of DOFs at each node
c --- i 1 ext_neqn DOF vector. If negative, this DOF is constrained.
c --- i 1 ext_nNods A vector mapping local node number to global node number.
c This record EXISTS ONLY for distributed .full files
c --- i 1 ext_nNods A vector mapping local node number to the domain who owns it.
c This record EXISTS ONLY for distributed .full files
c --- i 1 ext_neqn-neqn A vector mapping extended local dof (equation number) to global dof.
c This record EXISTS ONLY for distributed .full files.
c --- i 1 ext_nNods A vector mapping active node number used in assembly to global active node number.
c This record EXISTS ONLY for distributed .full files and actSymbFlag > 1.
c act nodes to ANSYS nodes mapping array (this record only exist when actSymbFlag > 1)
c --- i 1 ext_nNods A vector mapping active local node number used in assembly to ANSYS local node number.
c This record EXISTS ONLY when distKey = 1 or numCPU = 1
c --- i 1 GlbnNodes A vector mapping active global node number used in assembly to ANSYS global node number.
c This record EXISTS ONLY when distKey = 0 and numCPU > 1
c --- i 1 numCPU A vector (InActNumNodesSnd) giving the number of inactive nodes
c that needs to be sent to each domain
c This record EXISTS ONLY for distributed .full files and InActNKey > 0
c --- i 1 numCPU A vector (InActNumNodesRcv) giving the number of inactive nodes
c that needs to be received from each domain
c This record EXISTS ONLY for distributed .full files and InActNKey > 0
c --- i 1 IANSndCnt A vector (InActNodesSnd) giving local internal node number that needs to be
c sent to other domains.
c This record EXISTS ONLY when IANSndCnt > 0
c --- i 1 IANRcvCnt A vector (InActNodesRcv) giving local internal node number that needs to be
c received from other domains.
c This record EXISTS ONLY when IANRcvdCnt > 0
c extended equations mapping array (this record only exist when distKey == 1)
c --- i 1 numCPU A vector (extend_neqns_snd) giving the number of equations (dofs)
c that needs to be sent to each domain as these domains' extended nodal information.
c This record EXISTS ONLY for distributed .full files.
c --- i 1 numCPU A vector (extend_neqns_rcv) giving the number of equations (dofs)
c that needs to be received from each domain
c This record EXISTS ONLY for distributed .full files.
c --- i 1 ExtSndCnt A vector (extend_eqn_snd) giving local equation number that needs to be
c sent to other domains.
c This record EXISTS ONLY when ExtSndCnt > 0
c --- i 1 ExtRcvCnt A vector (extend_eqn_rcv) giving local equation number that needs to be
c received from other domains.
c This record EXISTS ONLY when ExtRcvCnt > 0
c extended equations (due to acrossCE) mapping array (this record only exist when distKey == 1 && GlbfinalAcCE > 0)
c --- i 1 numCPU A vector (extend_neqns_fromCE_snd) giving the number of equations (dofs)
c that needs to be sent to each domain as these domains' extended nodal information.
c This record EXISTS ONLY for distributed .full files and GlbfinalAcCE > 0.
c --- i 1 numCPU A vector (extend_neqns_fromCE_rcv) giving the number of equations (dofs)
c that needs to be received from each domain
c This record EXISTS ONLY for distributed .full files and GlbfinalAcCE > 0.
c --- i 1 nExtSndCE A vector (extend_eqn_fromCE_snd) giving local equation number that needs to be
c sent to other domains.
c This record EXISTS ONLY when nExtSndCE > 0
c --- i 1 nExtRcvCE A vector (extend_eqn_fromCE_rcv) giving local equation number that needs to be
c received from other domains.
c This record EXISTS ONLY when nExtRcvCE > 0
c shared equations (interface dof) mapping array (this record only exist when distKey == 1)
c --- i 1 numCPU A vector (shared_neqns_snd) giving the number of equations (dofs)
c that needs to be sent to each domain as these domains' shared nodal information.
c This record EXISTS ONLY for distributed .full files.
c --- i 1 numCPU A vector (shared_neqns_rcv) giving the number of equations (dofs)
c that needs to be received from each domain
c This record EXISTS ONLY for distributed .full files.
c --- i 1 ShaSndCnt A vector (shared_eqn_snd) giving local equation number that needs to be
c sent to other domains.
c This record EXISTS ONLY when ExtSndCnt > 0
c --- i 1 ShaRcvCnt A vector (shared_eqn_rcv) giving local equation number that needs to be
c received from other domains.
c This record EXISTS ONLY when ExtRcvCnt > 0
c BC information
c BC i 1 neqn DOFs with imposed values.
c --- dp/cmp 1 varies Imposed values.
c Mass Matrix.
c if lumpm = 0:
c The next two records are repeated as a group neqn times.
c MAS i 1 varies Matrix row indices. The last item
c corresponds to the diagonal. The
c length of this record will vary (actual
c length is returned from routine BINRD8)
c --- dp 1 varies Matrix terms.
c if lumpm = 1:
c --- dp 1 neqn Matrix diagonals.
c Mass matrix diagonal vector
c DIAGM dp 1 neqn diagonal vector data for mass matrix.
c Damping Matrix. The next two records are repeated as a group neqn times.
c DMP i 1 varies Matrix row indices. The last item
c corresponds to the diagonal. The
c length of this record will vary (actual
c length is returned from routine BINRD8)
c --- dp 1 varies Matrix terms.
c Damping matrix diagonal vector
c DIAGC dp 1 neqn diagonal vector data for damping matrix.
c K complex Matrix. The next two records are repeated as a group neqn times.
c KC i 1 varies Matrix row indices. The last item
c corresponds to the diagonal. The
c length of this record will vary (actual
c length is returned from routine BINRD8)
c --- dp 1 varies Matrix terms.
c Nodal graph vectors
c NGPH i 1 nNodes number of nonzeroes for each node.
c Repeat for each node
c i 1 varies Index vector. Node number in the vector is global when
c model has across CE
c G matrix if ncefull > 0.
c CE i 1 ext_nce List of dependent DOFs of all CEs.
c It EXISTS ONLY if ext_nce>0. The dependent DOF is local
c --- dp 1 ncefull g vector (constant terms) of local CEs. This record
c EXISTS ONLY if ncefull>0
c --- dp 1 ncefull imaginary g vector (constant terms) of local CEs. This
c vector only exists for FULL harmonic analyses (kan=3).
c This record EXISTS ONLY if ncefull>0
c --- dp 1 ncefull g vector (constant terms) of local CEs for nonlinear
c analysis predictor logic.
c This record EXISTS ONLY if ncefull>0 & predKey=1.
c Following CE data (G) records EXIST ONLY in the full file of the domain with CEs:
c --- i 1 4 Header for local CEs; 1=nRows, 2=nRows, 3=1, 4=0
c --- i 1 nRows Vector of 1's
c --- i 1 nRows Number of non-zero terms in each row for one CE
c Repeat for each row:
c --- i 1 varies Column indices in local equation numbers
c --- dp 1 varies Column values
c Following CE data (Gbc) records EXIST ONLY if buildGall == 1 in the full file of the domain with CEs:
c NOTE: this matrix includes boundary d.o.f. which touch the CEs (for cnvfor.F)
c --- i 1 4 Header for Gbc CEs; 1=nRows, 2=nRows, 3=1, 4=0
c --- i 1 nRows Vector of 1's
c --- i 1 nRows Number of non-zero terms in each row for a CE from Gbc
c Repeat for each row:
c --- i 1 varies Column indices in local equation numbers
c --- dp 1 varies Column values
c Following CE data records EXIST ONLY if n>0 in the full file, where n == ncefull with
c SMP and n == GlbfCE with DMP. NOTE: for DMP these records only exist in the .full file
c of master domain
c --- i 1 n List of dependent DOFs of all CEs. This record EXISTS ONLY
c if n>0. And it is ONLY in the full file of the master
c domain
c Virtual constraint vector
c VBC i 1 nVirtBCs marker array (bit 1 set -> constrained DOF for residual vector)
c (bit 2 set -> constrained DOF for enforced motion)
c (bit 3 set -> eliminated DOF for substructure master DOF)
c i 1 nVirtBCs virtual constraint DOFs
c GVBC i 1 GnVirtBCs marker array (bit 1 set -> constrained DOF for residual vector)
c (bit 2 set -> constrained DOF for enforced motion)
c (bit 3 set -> eliminated DOF for substructure master DOF)
c this record EXISTS ONLY for models using DMP with across CE
c i 1 GnVirtBCs virtual constraint DOFs
c this record EXISTS ONLY for models using DMP with across CE
c Substructuring master DOF vector
c MDF i 1 nMastDOF list of master DOFs for substructuring
c GMDF i 1 GlbnMast list of master DOFs for substructuring
c this record EXISTS ONLY for models using DMP with across CE
c Meaning of K11, K12, and G matrices:
c Given
c [K]{x} = {F}
c subject to the constraints
c {x1} = [G]{x2} + {g}
c where {x1} are the dependent DOFs, {x2} the independent DOFs
c This results in
c [K*]{x2} = {F*}
c where
c [K*] = [G]'[K11][G] + [G]'[K12] + [K21][G] + [K22]
c {F*} = [G]'{f1} + {f2} - [G]'[K11]{g} - [K21]{g}
c for the complex version of {F*} and {x1}:
c [G] is always real
c [K11] is complex and we denote it as [K11*] == [K11r,K11i]
c [K21] is complex and we denote it as [K21*] == [K21r,K21i]
c {g} is complex and we denote it as {g*} == {gr,gi}
c [G]'[K11*]{g*} = [G]'[K11r,K11i]*{gr,gi}
c = [G]'[K11r*gr - K11i*gi, K11i*gr + K11r*gi]
c [K21*]{g*} = [K21r,K21i]*{gr,gi}
c = [K21r*gr - K21i*gi, K21i*gr + K21r*gi]
c for the complex version of {x1}:
c [G] is always real
c {x2} is complex and we denote it as {x2*} == {x2r,x2i}
c {g} is complex and we denote it as {g*} == {gr,gi}
c [G]{x2*} + {g*} = [G]{x2r,x2i} + {gr,gi}
c = [G*x2r + gr, G*x2i + gi]