@@ -228,6 +228,8 @@ function doe_fit_model(nway, x, y, map, alpha, err) result(rst)
228
228
! ! relative to one another.
229
229
! ! - FS_MEMORY_ERROR: Occurs if there is a memory allocation
230
230
! ! error.
231
+ ! ! - FS_INVALID_ARGUMENT_ERROR: Occurs if nway is out of range, or if
232
+ ! ! map is used to "turn off" all model parameters.
231
233
type (doe_model) :: rst
232
234
! ! The resulting model.
233
235
@@ -259,7 +261,10 @@ function doe_fit_model(nway, x, y, map, alpha, err) result(rst)
259
261
260
262
! Input Checking
261
263
if (nway < 1 .or. nway > 3 ) then
262
- ! TO DO: Error - must be at least 1, but not more than 3
264
+ call errmgr% report_error(" doe_fit_model" , &
265
+ " The number of interaction levels must be between one and three." , &
266
+ FS_INVALID_ARGUMENT_ERROR)
267
+ return
263
268
end if
264
269
265
270
! Determine the parameter count
@@ -271,13 +276,16 @@ function doe_fit_model(nway, x, y, map, alpha, err) result(rst)
271
276
! Set up the map parameters
272
277
if (present (map)) then
273
278
if (size (map) /= nparam) then
274
- ! TO DO: Error - map is not sized correctly
279
+ call report_array_size_error(errmgr, " doe_fit_model" , " map" , &
280
+ nparam, size (map))
281
+ return
275
282
end if
276
283
mapptr = > map
277
284
else
278
285
allocate (nmap(nparam), stat = flag, source = .true. )
279
286
if (flag /= 0 ) then
280
- ! TO DO: Error - memory issue
287
+ call report_memory_error(errmgr, " doe_fit_model" , flag)
288
+ return
281
289
end if
282
290
mapptr = > nmap
283
291
end if
@@ -288,13 +296,17 @@ function doe_fit_model(nway, x, y, map, alpha, err) result(rst)
288
296
if (.not. mapptr(i)) n = n - 1
289
297
end do
290
298
if (n < 1 ) then
291
- ! TO DO: Error. there must be at least one parameter
299
+ call errmgr% report_error(" doe_fit_model" , &
300
+ " There must be at least one active model parameter." , &
301
+ FS_INVALID_ARGUMENT_ERROR)
302
+ return
292
303
end if
293
304
294
305
! Local memory allocations
295
306
allocate (xc(m, n), c(n, n), cxt(n, m), coeffs(n), stat = flag)
296
307
if (flag /= 0 ) then
297
- ! TO DO: Memory error
308
+ call report_memory_error(errmgr, " doe_fit_model" , flag)
309
+ return
298
310
end if
299
311
300
312
! Create the design matrix
@@ -322,7 +334,8 @@ function doe_fit_model(nway, x, y, map, alpha, err) result(rst)
322
334
if (flag == 0 ) allocate (rst% stats(nparam), stat = flag)
323
335
if (flag == 0 ) allocate (rst% map(nparam), stat = flag, source = mapptr)
324
336
if (flag /= 0 ) then
325
- ! TO DO: Memory error
337
+ call report_memory_error(errmgr, " doe_fit_model" , flag)
338
+ return
326
339
end if
327
340
j = 0
328
341
do i = 1 , nparam
@@ -459,8 +472,15 @@ function doe_evaluate_model_1(nway, beta, x, map, err) result(rst)
459
472
integer (int32) :: m, n, nparam, flag
460
473
logical , pointer , dimension (:) :: mapptr
461
474
logical , allocatable , target , dimension (:) :: nmap
462
-
475
+ class(errors), pointer :: errmgr
476
+ type (errors), target :: deferr
477
+
463
478
! Initialization
479
+ if (present (err)) then
480
+ errmgr = > err
481
+ else
482
+ errmgr = > deferr
483
+ end if
464
484
m = size (x, 1 )
465
485
n = size (x, 2 )
466
486
@@ -474,25 +494,31 @@ function doe_evaluate_model_1(nway, beta, x, map, err) result(rst)
474
494
if (nway >= 2 ) nparam = nparam + n * (n - 1 )
475
495
if (nway >= 3 ) nparam = nparam + n * (n** 2 - 1 )
476
496
if (size (beta) /= nparam) then
477
- ! TO DO: Error - beta is not sized correctly
497
+ call report_array_size_error(errmgr, " doe_evaluate_model_1" , " beta" , &
498
+ nparam, size (beta))
499
+ return
478
500
end if
479
501
480
502
! Memory Allocations
481
503
allocate (rst(m), stat = flag)
482
504
if (flag /= 0 ) then
483
- ! TO DO: Error - memory issue
505
+ call report_memory_error(errmgr, " doe_evaluate_model_1" , flag)
506
+ return
484
507
end if
485
508
486
509
! Set up the map parameters
487
510
if (present (map)) then
488
511
if (size (map) /= nparam) then
489
- ! TO DO: Error - map is not sized correctly
512
+ call report_array_size_error(errmgr, " doe_evaluate_model_1" , &
513
+ " map" , nparam, size (map))
514
+ return
490
515
end if
491
516
mapptr = > map
492
517
else
493
518
allocate (nmap(nparam), stat = flag, source = .true. )
494
519
if (flag /= 0 ) then
495
- ! TO DO: Error - memory issue
520
+ call report_memory_error(errmgr, " doe_evaluate_model_1" , flag)
521
+ return
496
522
end if
497
523
mapptr = > nmap
498
524
end if
0 commit comments