~fluidity-core/fluidity/sea-ice-branch

« back to all changes in this revision

Viewing changes to diagnostics/Differential_Operators.F90

  • Committer: Simon Mouradian
  • Date: 2012-05-30 09:08:23 UTC
  • mfrom: (3520.32.274 fluidity)
  • Revision ID: simon.mouradian06@imperial.ac.uk-20120530090823-pq0fgemjpqn72j8d
mergeĀ fromĀ lp:fluidity

Show diffs side-by-side

added added

removed removed

Lines of Context:
134
134
    type(scalar_field), intent(inout) :: s_field
135
135
    
136
136
    character(len = OPTION_PATH_LEN) :: path
137
 
    type(block_csr_matrix) :: ct_m
 
137
    type(block_csr_matrix), pointer :: ct_m
138
138
    type(csr_sparsity), pointer :: divergence_sparsity
139
139
    type(csr_matrix), pointer :: mass
140
140
    type(scalar_field) :: ctfield, ct_rhs
141
141
    type(scalar_field), pointer :: masslump
142
142
    type(vector_field), pointer :: positions, source_field
 
143
    logical :: using_divergence_matrix_cache
143
144
    
144
145
    source_field => vector_source_field(state, s_field)
145
146
    path = trim(complete_field_path(s_field%option_path)) // "/algorithm"
146
147
    
147
 
    if(use_divergence_matrix_cache(state)) then
148
 
      ct_m = extract_block_csr_matrix(state, trim(s_field%name) // "DivergenceMatrix")
 
148
    using_divergence_matrix_cache = use_divergence_matrix_cache(state)
 
149
    if(using_divergence_matrix_cache) then
 
150
      ct_m => extract_block_csr_matrix(state, trim(s_field%name) // "DivergenceMatrix")
149
151
      call incref(ct_m)
150
152
      ct_rhs = extract_scalar_field(state, trim(s_field%name) // "DivergenceRHS")
151
153
      call incref(ct_rhs)
153
155
      positions => extract_vector_field(state, "Coordinate")
154
156
    
155
157
      divergence_sparsity => get_csr_sparsity_firstorder(state, s_field%mesh, source_field%mesh)
 
158
      allocate(ct_m)
156
159
      call allocate(ct_m, divergence_sparsity, (/1, source_field%dim/), name = "DivergenceMatrix" )
157
160
      call allocate(ct_rhs, s_field%mesh, name = "CTRHS")
158
161
    
177
180
    end if
178
181
 
179
182
    call deallocate(ct_m)
 
183
    if(.not.using_divergence_matrix_cache)then
 
184
      deallocate(ct_m)
 
185
    end if
180
186
    call deallocate(ctfield)
181
187
 
182
188
  contains